package com.habdqn.easybuy.service.impl;

import com.habdqn.easybuy.dao.ProductDao;
import com.habdqn.easybuy.dao.ShopDao;
import com.habdqn.easybuy.dao.impl.ProductDaoImpl;
import com.habdqn.easybuy.dao.impl.ShopDaoImpl;
import com.habdqn.easybuy.entity.Shop;
import com.habdqn.easybuy.service.ProductService;
import com.habdqn.easybuy.service.ShopService;

import java.util.List;

/**
 * @author Xing.Jiejian
 * @date 2020/12/2
 */
public class ShopServiceImpl implements ShopService {
    private ShopDao shopDao = new ShopDaoImpl();
    private ProductDao productDao = new ProductDaoImpl();
    /**
     * 根据用户名查询购物车信息
     *
     * @param userId        用户编号
     * @param isWithProduct 是否关联商品信息
     * @return 购物车记录集合
     */
    @Override
    public List<Shop> queryByUserId(int userId, boolean isWithProduct) {
        List<Shop> shops = shopDao.queryAll(userId);
        // 关联商品信息
        if (isWithProduct){
            shops.forEach(shop -> {
                shop.setProduct(productDao.queryById(shop.getProductId()));
            });
        }
        return shops;
    }

    /**
     * @param ids
     * @return
     */
    @Override
    public List<Shop> queryByIds(String ids) {
        return shopDao.queryByIds(ids);
    }

    /**
     * @param id
     * @return
     */
    @Override
    public Shop queryById(int id) {
        return shopDao.queryById(id);
    }

    /**
     * 新增数据
     *
     * @param shop 实例对象
     * @return 实例对象
     */
    @Override
    public Shop insert(Shop shop) {
        shop.setId(shopDao.insert(shop));
        return shop;
    }

    /**
     * 添加购物车记录
     * 1.需要校验，该用户是否有该商品的购物车记录
     * 1) 如果没有记录，则新增一条数据
     * 2) 如果有记录，则修改/更新原记录中的数量
     *
     * @param shop
     */
    @Override
    public void add(Shop shop) {
        // 1. 查询是否有对应的记录(根据用户编号及商品编号查询)
        Shop oldShop = shopDao.queryByUserAndProduct(shop.getUserId(),shop.getProductId());
        if (oldShop!=null){
            // 如果有记录，更新原记录
            oldShop.setProductQuantity(oldShop.getProductQuantity()+shop.getProductQuantity());
            update(oldShop);
        }else{
            // 如果没有记录，则新增记录
            insert(shop);
        }
    }

    /**
     * 修改数据
     *
     * @param shop 实例对象
     * @return 实例对象
     */
    @Override
    public Shop update(Shop shop) {
        if (shopDao.update(shop)>0){
            return shop;
        }
        return null;
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return shopDao.deleteById(id)>0;
    }

    /**
     * 添加对应shop的商品数量
     *
     * @param shopId
     * @param number
     */
    @Override
    public void plusNumber(int shopId, int number) {
        // 根据shopId查询shop对象
        Shop shop = queryById(shopId);
        shop.setProductQuantity(shop.getProductQuantity()+number);
        shopDao.update(shop);
    }

    /**
     * 直接更新对应记录的数量
     *
     * @param shopId
     * @param number
     */
    @Override
    public void updateNumber(int shopId, int number) {
        // 根据shopId查询shop对象
        Shop shop = queryById(shopId);
        shop.setProductQuantity(number);
        shopDao.update(shop);
    }
}
